home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / langs / nasm20 / nasm20s.zoo / lib / src / immbrel.s65 < prev    next >
Encoding:
Text File  |  1993-01-22  |  1.7 KB  |  70 lines

  1. ; ------------------------------
  2. ; Relocate instr. like
  3. ;  lda #>foo; sta bar+1;
  4. ;  lda #<foo; sta bar;
  5. ;
  6. ; Check whether immediate data
  7. ; relocation is required.
  8. ;     No ERROR CHECKING!!
  9. ; ------------------------------
  10. :yplus1  iny
  11.          bne   :o1
  12.          inc   :vim+1
  13. :o1      rts
  14. ; -----------------------------
  15. :do_imms ldy   #0             ; set Y for later
  16.          ldx   #0             ; Set and keep X at 0
  17.          lda   (:vim),y       ; get #pages
  18.          sta   :lpages        ; save for LSB and
  19.          sta   :mpages        ; MSB
  20.  
  21. :getnext jsr   :yplus1
  22.          lda   (:vim),y       ; get next entry count
  23.          beq   :nxtpage
  24.          sta   :entries
  25.  
  26. :m1      jsr   :yplus1
  27.          lda   (:vim),y       ; get pointer to
  28.          sta   :foo           ; vimediate location
  29.          lda   (:foo,x)       ; update lsb value
  30.          sec
  31.          sbc   :dif
  32.          sta   (:foo,x)
  33.  
  34.          dec   :entries
  35.          bne   :m1
  36.  
  37. :nxtpage inc   :foo+1         ; skip to next page
  38.          dec   :lpages
  39.          bne   :getnext
  40.  
  41.  
  42.          lda   #>|R_START
  43.          sta   :foo+1
  44.  
  45. :mgetnxt jsr   :yplus1
  46.          lda   (:vim),y       ; get next entry count
  47.          beq   :mnxtpage
  48.          sta   :entries
  49.  
  50. :m2      jsr   :yplus1
  51.          lda   (:vim),y       ; get pointer to
  52.          sta   :foo           ; vimediate location
  53.          jsr   :yplus1        ; y++ (16 Bit)
  54.          lda   (:vim),y       ; get low value
  55.          sec                  ; calc the carry
  56.          sbc   :dif
  57.          lda   (:foo,x)       ; update msb value
  58.          sbc   :dif+1
  59.          sta   (:foo,x)
  60.  
  61.          dec   :entries
  62.          bne   :m2
  63.  
  64. :mnxtpage inc  :foo+1         ; skip to next page
  65.          dec   :mpages
  66.          bne   :mgetnxt
  67.          rts                  ; all done
  68.  
  69.  
  70.